var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieSession = require('cookie-session');
// 装session
// 然后cookie-session需要做配置，parser不用，把配置拉过来
var logger = require('morgan');
// 装完中间件然后引入
var multer = require('multer');
let cors = require('cors');  //跨域中间件
var app = express();




// 中间件的配置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieSession({
	name:'top-news',
  keys:['aaaaa','bbb','ccc'],
  maxAge: 1000 * 60 * 60 * 60 * 24
}))
// 然后文件上传--装multer
const storage = multer.diskStorage({
  // 分配位置
  destination: function (req, file, cb) {
    // req请求体  req.files  == array   file一张
    if(req.url.indexOf('reg')!==-1){
      cb(null, path.join('public','upload','user'))//磁盘路径--node里所有资源来自于磁盘
    }else if(req.url.includes('banner')){
      cb(null, path.join('public','upload','banner'))//磁盘路径--node里所有资源来自于磁盘
    }else{
      cb(null, path.join('public','upload','news'))//磁盘路径--node里所有资源来自于磁盘
    }
  },
  // 确定如何随机文件名--提出介入可能
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

//配置中间件
let objMulter = multer({ storage:storage}); //dest: 指定 保存位置（存到服务器)
app.use(objMulter.any());  //允许上传什么类型文件,any 代表任何类型 
app.use('/',cors({
  //允许所有前端域名
  "origin": ["http://localhost:8001","http://localhost:5000","http://127.0.0.1:8848"],  
  "credentials":true,//允许携带凭证
  "methods": "GET,HEAD,PUT,PATCH,POST,DELETE", //被允许的提交方式
  "allowedHeaders":['Content-Type','Authorization','token']//被允许的post方式的请求头
}));


// 多位置静态资源托管
app.use(express.static(path.join(__dirname, 'public/template')));
// app.use('/admin',express.static(path.join(__dirname, 'public/admin')));
app.use(express.static(path.join(__dirname, 'public')));//只是简单的配到public是有问题的，管理端用户端应该分开，还有upload的分管

// 默认给一个目录名它会去自动找目录下的index--一上来没有匹配到↓往下找，找不到处理错误
// 要通过地址栏修改进入管理端 所以需要进行多次静态资源托管
// 如果在此处复制粘贴硬写两个具体地址，打不开后一个，因为查找自上而下找到一个就会停止不会往下找了
// 此处可以查文档--利用express托管静态文件
// app.use(express.static('public'))

// 接口的响应
// 客户端基本都是在查
// 客户端接口--按路由概念分配到api--先实现接口响应
app.all('/api/*',require('./utls/params'))
app.use('/api/login',require('./routes/api/login'))
app.use('/api/reg',require('./routes/api/reg'))
app.use('/api/user',require('./routes/api/user'))

app.use('/api/news',require('./routes/api/news'))
app.use('/api/is-token',require('./routes/api/is-token'))

// 管理端
app.use('/api/delete',require('./routes/api/delete'))



// app.use('/api/banner',require('./routes/api/banner'))
// app.use('/api/home',require('./routes/api/home'))
// app.use('/api/column',require('./routes/api/column'))
// app.use('/api/follow',require('./routes/api/follow'))

// 简略写法

// 用户端接口

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  // res.status(err.status || 500);
  // res.render('error');
  if(req.url.includes('/api')){//webApi接口错误
    res.send({
      err:1,
      msg:'不存在的接口名'
    })
  }else if(req.url.includes('/admin')){//服务端Api接口错误
    res.render('error');
  }else{//交还给客户端判断
    res.sendFile(path.join(__dirname, 'public','template', 'index.html'));
  }

});

module.exports = app;
